﻿/*
  --============================================================================================
  --============================================================================================
  -- Fichier          :	DetailPV_VM.cs
  -- Objet			  :	View Model de l'écran de détail d'un PV
  -- Auteur			  :	S. Le Gouellec
  -- Date de création : 07/2014
  --                              :
  --                              :
  -- Notes spéciales		  :
  -- Historique			  :
  ----------------------------------------------------------------------------------------------
  -- |     Code    |  Vers. |   Date   | Auteur	|                  Description
  -- |  Dem/inc/pr |  	    |          |        |         
  -- -------------------------------------------------------------------------------------------
  -- |             |   1.0  | 07/2014  |  SLE	| Création
  -- |	           |	    |	       |        |
  --============================================================================================
  --============================================================================================
*/

using MessageBox;
using ModelEntities.Adapter;
using ModelEntities.Facade;
using Models;
using ReprisePV.Views;
using GeneralServices.ViewModel;
using System;
using System.Windows.Controls;
using System.Windows.Input;

namespace ReprisePV.ViewModels
{
    /// <summary>
    /// ViewModel de l'écran de détail d'un PV
    /// </summary>
    public class DetailPV_VM : ViewModelBase
    {
        #region Attribut(s)
        /// <summary>
        /// PV que l'utilisateur va pouvoir modifier
        /// </summary>
        private MEntetePV pv;

        /// <summary>
        /// PV d'origine
        /// </summary>
        private MEntetePV pvOrigin;

        #endregion

        #region Propriété(s)

        /// <summary>
        /// PV que l'utilisateur va pouvoir modifier
        /// </summary>
        public MEntetePV PV
        {
            get { return pv; }
            set
            {
                pv = value;
                OnPropertyChanged("PV");
            }
        }

        /// <summary>
        /// PV d'origine
        /// </summary>
        public MEntetePV PVOrigin
        {
            get { return pvOrigin;  }
            set
            {
                pvOrigin = value;
                OnPropertyChanged("PVOrigin");
            }
        }

        /// <summary>
        /// Command : Suppression du PV
        /// </summary>
        public ICommand Erase
        {
            get;
            set;
        }

        /// <summary>
        /// Command : Validation des modifications effectuées
        /// </summary>
        public ICommand Commit
        {
            get;
            set;
        }

        /// <summary>
        /// Command : Annulation des modificatons effectuées + Femerture de l'écran de détail
        /// </summary>
        public ICommand Cancel
        {
            get;
            set;
        }

        #endregion

        #region Constructeur(s)

        public DetailPV_VM()
        {
            Erase = new RelayCommand(ExErase);
            Commit = new RelayCommand(ExCommit);
            Cancel = new RelayCommand(ExCancel);
        }

        #endregion

        #region Méthode(s)

        #region Event Commit

        /// <summary>
        /// TODO : Mettre la vue en parametre
        /// </summary>
        /// <param name="obj"></param>
        private void ExCommit(object obj)
        {
            // Faire le controle pour les versions et les droits etc ..
            DetailPV view = obj as DetailPV;
            if (obj != null)
            {
                if (pv.Version.Equals("QUA"))
                    ShowMessageBox.Show(TYPE_WINDOW_BOX.AVERTISSEMENT, "La modification de ce PV n'est plus possible, les quatres versions allouées ont été utilisées", "");
                else
                {
                    // Construction du nom du fichier ou à l'intérieur je sais pas encore
                    new WritePV().Write(pv,
                        view.dgCompoChimique.DataSource,
                        view.dgTraca.DataSource,
                        "C:\\Users\\legouellecs\\Desktop\\toto.txt");
                }
            }
        }

        #endregion

        #region Event Erase

        /// <summary>
        /// Command permettant de supprimer le PV qui est modifié et présent en base actuellement
        /// </summary>
        /// <param name="obj"></param>
        private void ExErase(object obj)
        {
            if (ShowMessageBox.Show
                (TYPE_WINDOW_BOX.CONFIRM, "Etes-vous sur de vouloir supprimer ce PV ", 
                        String.Format("PV : {0} | {1} | {2}", pv.NoPV, pv.DateEdition.ToShortDateString(), pv.Version)) == TYPE_RESULT_BOX.OK)
            {
                FacadePV.Instance.ErasePV(pv);
                this.OnActionVMClosed(new ActionVMArgs(obj as UserControl, String.Empty));
                FacadePV.Instance.CommitAfterErase(pv);
            }
        }

        #endregion

        #region Event Cancel

        /// <summary>
        /// Command permettant d'annuler les modifications d'un PV
        /// </summary>
        /// <param name="obj"></param>
        private void ExCancel(object obj)
        {
            if (ShowMessageBox.Show(TYPE_WINDOW_BOX.CONFIRM, "Etes-vous sur de vouloir annuler les modifications en cours", "") == TYPE_RESULT_BOX.OK)
            {
                this.OnActionVMClosed(new ActionVMArgs(obj as UserControl, String.Empty));
            }
        }

        #endregion

        #endregion

    }
}
